/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * PanelPrincipal.java
 *
 * Created on 25/05/2011, 14:53:38
 */

package InterfaceEI;

import Utils.Utilidades;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import org.jfree.ui.LengthAdjustmentType;
import sun.font.Font2D;

/**
 *
 * @author Isabela
 */
public class PanelPrincipal extends javax.swing.JPanel {

    /** Creates new form PanelPrincipal */
    public PanelPrincipal() {
        initComponents();
        
        //iconeM.setVisible(false);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
   @Override
    public void paint(Graphics g) {
         super.paint(g);

        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

//        labelM = (JLabel) this.getComponent(0);
//        labelM.setVisible(false);

        if(inicioViga){
            //variaveis de desenho do apoio para o ponto do inicio da viga
            int inicioXP0 = xInicio - 20;
            int inicioXP1 = xInicio + 20;
            int inicioYP0 = yInicio + 40;

            if(fixoD){
                desenhaApoioFixo(g2d, inicioXP0, inicioXP1, inicioYP0);

            }
            else if(desliF){
                desenhaApoioDeslizante(g2d, inicioXP0, inicioXP1, inicioYP0);

            }
            else if(pontoE){
                g.setColor(Color.red);
                g.drawOval(xInicio  - raio/2, yInicio - raio, raio, raio);
            }
            else if(engP){
                desenhaEngasteInicio(g2d);
            }
        }
        if(fimViga){
             //variaveis de desenho do apoio para o ponto do fim da viga
            int fimXP0 = xFim - 20;
            int fimXP1 = xFim + 20;
            int fimYP0 = yInicio + 40;

            if(fixoD){
                g2d.setStroke(new BasicStroke(1.5f));
                g2d.drawLine(xInicio + raio/2, yInicio-raio/2, xFim - raio/2, yInicio-raio/2);
                g2d.setStroke(new BasicStroke(1.0f));
                desenhaApoioDeslizante(g2d, fimXP0, fimXP1, fimYP0);
            }
            else if(desliF){
                g2d.setStroke(new BasicStroke(1.5f));
                g2d.drawLine(xInicio + raio/2, yInicio-raio/2, xFim - raio/2, yInicio-raio/2);
                g2d.setStroke(new BasicStroke(1.0f));
                desenhaApoioFixo(g2d, fimXP0, fimXP1, fimYP0);
            }
            else if(pontoE){
                g.setColor(Color.black);
                g2d.setStroke(new BasicStroke(1.5f));
                g2d.drawLine(xInicio + raio/2, yInicio-raio/2, xFim - raio/2, yInicio-raio/2);
                g2d.setStroke(new BasicStroke(1.0f));
                desenhaEngasteFim(g2d);
            }
            else if(engP){
                g2d.setColor(Color.black);
                g2d.setStroke(new BasicStroke(1.5f));
                g2d.drawLine(xInicio + raio/2, yInicio-raio/2, xFim - raio/2, yInicio-raio/2);
                g2d.setStroke(new BasicStroke(1.0f));
                g.setColor(Color.red);
                g.drawOval(xFim  - raio/2, yInicio - raio, raio, raio);

            }
            tamanho = xFim - xInicio;
            if(!desenhouViga){
                desenhaMetros(g2d);
            }
        }
        if(distribuida){
            distribuida(g2d);
        }
        if(concentrada){
            concentrada(g2d);
        }
        if(cMomento){
            cargaMomento(g2d);
        }
        if(momentoFletor || esforcoCortante){
            esforcoCortanteMomentoFletor(g2d);
        }
        if(deformadaValor){
            deformadaValor(g2d);
        }
        if(graficoFletor){
            graficoFletor(g2d);
        }
        if(graficoCortante){
            graficoCortante(g2d);
        }
        if(graficoDeformada){
            graficoDeformada(g2d);
        }
        if((fixoD || desliF)){
            if(reacaoBiapoiadaA){
                reacaoBiapoiadaA(g2d);
            }
            if(reacaoBiapoiadaB){
                reacaoBiapoiadaB(g2d);
            }
        }
        if(engP && reacaoEngastada){
            reacaoEngastada(g2d);
        }
    }

    private void desenhaMetros(Graphics2D g2d){
        double metros = conversoes.conversaoPixelMX(tamanho, getWidth());
        DecimalFormat df = new DecimalFormat("0.00");

        String a;
        a = String.valueOf(df.format(metros));
        int aux = (a.length()+1)*7;

        g2d.setColor(Color.blue);
        g2d.setFont(new Font(null, Font.BOLD, 12));
        g2d.drawString(a, xFim + 8, yInicio - 5);

        g2d.drawString("m", xFim + aux, yInicio - 5);
    }

    private void desenhaApoioFixo(Graphics2D g,int x0,int x1,int y0){
        g.clearRect(0, 0, this.WIDTH, this.HEIGHT);

        int xB = x0 + 20;

        // Cria um polígono que será o nosso triângulo.
        Polygon triangulo1 = new Polygon();
        // Adiciona o primeiro ponto, o de cima.
        triangulo1.addPoint(xB, yInicio);
        // Adiciona o segundo ponto, o do canto inferior esquerdo
        triangulo1.addPoint(x0, y0);
        // Adiciona o segundo ponto, o do canto inferior direito
        triangulo1.addPoint(x1, y0);

        g.drawPolygon(triangulo1);

        g.setColor(Color.red);

        g.drawOval(xB  - raio/2, yInicio - raio, raio, raio);

        int alturaLinha = y0 + 5;

        g.setColor(Color.black);
        for (int i = x0; i <= x1; i += 4) {
            g.drawLine(i, y0, i - 3, y0 + 5);
        }

        g.setStroke(new BasicStroke(1.5f));
        g.drawLine(x0 - 2, y0, x1 + 2, y0);

    }

    private void desenhaApoioDeslizante(Graphics2D g,int x0,int x1,int y0){
        g.clearRect(0, 0, this.WIDTH, this.HEIGHT);

        int xB = x0 + 20;

        // Cria um polígono que será o nosso triângulo.
        Polygon triangulo1 = new Polygon();
        // Adiciona o primeiro ponto, o de cima.
        triangulo1.addPoint(xB, yInicio);
        // Adiciona o segundo ponto, o do canto inferior esquerdo
        triangulo1.addPoint(x0, y0);
        // Adiciona o segundo ponto, o do canto inferior direito
        triangulo1.addPoint(x1, y0);

        g.drawPolygon(triangulo1);

        g.setColor(Color.red);


        g.drawOval(xB  - raio/2, yInicio - raio, raio, raio);

        int alturaLinha = y0 + 5;

        g.setColor(Color.black);

        g.setStroke(new BasicStroke(1.5f));
        g.drawLine(x0 - 2, y0 + 5, x1 + 2, y0+5);

    }

     private void desenhaEngasteFim(Graphics2D g){
         int aux = 25;
         g.drawLine(xFim, yInicio - aux, xFim, yInicio + aux);

         for(int i=(yInicio - aux); i<= (yInicio+aux); i+=4){
             g.drawLine(xFim, i, xFim+5, i+3);
         }
     }

     private void desenhaEngasteInicio(Graphics2D g){
         int aux = 25;
         g.drawLine(xInicio, yInicio - aux, xInicio, yInicio + aux);

         for(int i=(yInicio - aux); i<= (yInicio+aux); i+=4){
             g.drawLine(xInicio, i, xInicio-5, i+3);
         }
     }

     private void concentrada(Graphics2D g) {
        g.setColor(Color.black);
        g.setStroke(new BasicStroke(2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
        g.drawLine(xConcentrada, yInicio - 50, xConcentrada, yInicio - 20);

        int altura1 = yInicio - 20;
        int altura2 = yInicio - 4;

        tamanhoConcentrada = yInicio - 4 - (yInicio - 50);

        Polygon trianguloF = new Polygon();
        // Adiciona o primeiro ponto, o de cima.
        trianguloF.addPoint(xConcentrada - 10, altura1);
        // Adiciona o segundo ponto, o do canto inferior esquerdo
        trianguloF.addPoint(xConcentrada + 10, altura1);
        // Adiciona o segundo ponto, o do canto inferior direito
        trianguloF.addPoint((2 * xConcentrada + 0) / 2, altura2);

        //System.out.println("Forca: " + (2 * x) / 2);
        g.fillPolygon(trianguloF);

        if(!desenhouC){
            g.setColor(Color.blue);
            g.fillOval(xConcentrada, yInicio - 60, 4, 4);
            desenhaMetrosCarga(g, xConcentrada + 8, yInicio - 60, xConcentrada);
        }

    }

     private void distribuida(Graphics2D g){
         int xI;
         int xF;
         boolean aux = false;
         int t = 0;
         if(xFimDist !=0 &&(xInicioDist > xFimDist)){
            xI =xFimDist;
            xF = xInicioDist;
            t = xInicioDist - xFimDist;
            aux = true;
         }
         else{
             xI = xInicioDist;
             xF = xFimDist;
             t= xFimDist - xInicioDist;
             aux = false;
         }

         tamanhoDistribuida = t;

         g.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
         g.setColor(Color.ORANGE);
         g.fillRect(xI, yInicio - raio - 30, t, 30);
         g.setColor(Color.BLACK);
         g.setStroke(new BasicStroke(1.5f));
         g.drawRect(xI-2, yInicio - raio - 30-2, t+3, 30+3);
         int altura1 = yInicio - raio - 10;
         int altura2 = altura1 + 10;

         g.setStroke(new BasicStroke(1.5f));
         g.setColor(Color.BLACK);
         if (!aux) {
             for (int i = 5; i < (int) (xFimDist - xInicioDist); i += 15) {
                 g.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
                 g.drawLine(xI + i, yInicio - raio - 30, xI + i, altura1);


//               int altura1 = y + 35;
//               int altura2 = y + 50;
//
                 Polygon trianguloF = new Polygon();
                 // Adiciona o primeiro ponto, o de cima.
                 trianguloF.addPoint(xI + i - 4, altura1);
                 // Adiciona o segundo ponto, o do canto inferior esquerdo
                 trianguloF.addPoint(xI + i + 4, altura1);
                 // Adiciona o segundo ponto, o do canto inferior direito
                 trianguloF.addPoint((2 * (xI + i)) / 2, altura2);

                 g.drawPolygon(trianguloF);
             }
         }
        else{
            for (int i = t -5; i > 5; i -= 15) {
                 g.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
                 g.drawLine(xI + i, yInicio - raio - 30, xI + i, altura1);


//               int altura1 = y + 35;
//               int altura2 = y + 50;
//
                 Polygon trianguloF = new Polygon();
                 // Adiciona o primeiro ponto, o de cima.
                 trianguloF.addPoint(xI + i - 4, altura1);
                 // Adiciona o segundo ponto, o do canto inferior esquerdo
                 trianguloF.addPoint(xI + i + 4, altura1);
                 // Adiciona o segundo ponto, o do canto inferior direito
                 trianguloF.addPoint((2 * (xI + i)) / 2, altura2);

                 g.drawPolygon(trianguloF);
             }
        }

         if (!desenhouD) {
             g.setColor(Color.blue);
             g.fillOval(xI, yInicio - raio - 40, 4, 4);
             desenhaMetrosCarga(g, xI + 8, yInicio - raio - 40, xI);
             if (xF !=0) {
                 g.fillOval(xF, yInicio - raio - 40, 4, 4);
                 desenhaMetrosCarga(g, xF + 8, yInicio - raio - 40, xF);
             }
         }
     }

     private void desenhaMetrosCarga(Graphics2D g2d, int x, int y, int medida){
         double metros = conversoes.conversaoPixelMX(medida - xInicio, getWidth());
         DecimalFormat df = new DecimalFormat("0.00");

         String a;
         a = String.valueOf(df.format(metros));
         int aux = (a.length()+1)*7;

         g2d.setColor(Color.blue);
         g2d.setFont(new Font(null, Font.BOLD, 12));
         g2d.drawString(a, x, y);
         g2d.drawString("m", x + aux - 9, y);
     }

     private void momentoFletor(Graphics2D g){
         DecimalFormat df = new DecimalFormat("0.00");

         String a;
         a = String.valueOf(df.format(valorMomento));

         int largura = (a.length() +1)*7;
         int altura = 10;

         float hsb[] = new float[3];
         Color.RGBtoHSB(236, 233, 216, hsb);
         g.setColor(Color.getHSBColor(hsb[0], hsb[1], hsb[2]));
         g.fillRect(xMomento, yMomento - altura, largura, altura);

         g.setColor(Color.BLACK);
         g.setStroke(new BasicStroke(1.0f));
         g.drawRect(xMomento - 2, yMomento - 2 - altura, largura+3, altura+3);

         g.setColor(Color.black);
         g.setFont(new Font(null, Font.PLAIN, 10));
         g.drawString("M:", xMomento + 1, yMomento+8-altura);
         g.drawString(a, xMomento+14, yMomento+8-altura);
         //g.drawString("m", x + 38, y);
     }

     public void esforcoCortanteMomentoFletor(Graphics2D g){
         DecimalFormat df = new DecimalFormat("0.00");

         String aM;
         aM = String.valueOf(df.format(valorMomento));

         //System.out.println("LarguraM: " + aM.length());

         String aC;
         aC = String.valueOf(df.format(valorCortante));
         //System.out.println("LarguraE: " + aC.length());

         //Definindo Largura e Altura do Retangulo
         int largura;
         int altura = 10;

         int alturaM = 10;
         int alturaC = 10;
         if(aM.length() > aC.length()){
             largura = (aM.length() +1)*7;
         }
         else{
             largura = (aC.length() +1)*7;
         }
         //System.out.println("Largura: " + largura);
         if(momentoFletor && esforcoCortante){
             altura = 20;
             alturaC = 20;
         }

         //Definindo as coordenadas X e Y do Retangulo
         int xD;
         int yD;
         if(momentoFletor){
             xD = xMomento;
             yD = yMomento;
         }
         else{
             xD = xCortante;
             yD = yCortante;
         }


         float hsb[] = new float[3];
         Color.RGBtoHSB(236, 233, 216, hsb);
         g.setColor(Color.getHSBColor(hsb[0], hsb[1], hsb[2]));
         g.fillRect(xD, yD - altura, largura, altura);

         g.setColor(Color.BLACK);
         g.setStroke(new BasicStroke(1.0f));
         g.drawRect(xD - 2, yD - 2 - altura, largura+3, altura+3);

         if(momentoFletor){
             g.setColor(Color.black);
             g.setFont(new Font(null, Font.PLAIN, 10));
             g.drawString("M:", xD + 1, yD + 8 - alturaM);
             g.drawString(aM, xD+ 14, yD + 8 - alturaM);
         }
         if(esforcoCortante){
             g.setColor(Color.black);
             g.setFont(new Font(null, Font.PLAIN, 10));
             g.drawString("E:", xD + 1, yD + 8 - alturaC);
             g.drawString(aC, xD + 14, yD + 8 - alturaC);
         }
     }

     public void deformadaValor(Graphics2D g){
         DecimalFormat df = new DecimalFormat("0.0000000000");

         String aD;
         aD = String.valueOf(df.format(valorDeformada));

         //Definindo Largura e Altura do Retangulo
         int largura;
         int altura = 10;     
         largura = (aD.length() +1)*7;
         
         //Definindo as coordenadas X e Y do Retangulo
         int xD;
         int yD;
         
         xD = xDeformada;
         yD = yDeformada;
         
        
         float hsb[] = new float[3];
         Color.RGBtoHSB(236, 233, 216, hsb);
         g.setColor(Color.getHSBColor(hsb[0], hsb[1], hsb[2]));
         g.fillRect(xD, yD - altura, largura, altura);

         g.setColor(Color.BLACK);
         g.setStroke(new BasicStroke(1.0f));
         g.drawRect(xD - 2, yD - 2 - altura, largura+3, altura+3);


         g.setColor(Color.black);
         g.setFont(new Font(null, Font.PLAIN, 10));
         g.drawString("D:", xD + 1, yD + 8 - altura);
         g.drawString(aD, xD + 14, yD + 8 - altura);
     }

     public void cargaMomento(Graphics2D g){
        try {
            String localExecucao = System.getProperty("user.dir").replaceAll("\\\\", "/");
            localExecucao = localExecucao + "/src/Icones/momentoNovo.PNG";
            //System.out.println("L: " + localExecucao);
            BufferedImage imagem = ImageIO.read(new File("./src/Icones/momentoNovo.png"));
            //BufferedImage imagem = ImageIO.read(new File(localExecucao));
            g.drawImage(imagem, xCMomento, yInicio - 15, null);

            if (!desenhouCM) {
                g.setColor(Color.blue);
                g.fillOval(xCMomento, yInicio - 30, 4, 4);
                desenhaMetrosCarga(g, xCMomento + 8, yInicio - 30, xCMomento);
            }
        }
        catch (IOException ex) {
            Logger.getLogger(PanelPrincipal.class.getName()).log(Level.SEVERE, null, ex);
        }

     }

     public void graficoFletor(Graphics2D g){
         g.setColor(Color.blue);
         g.setStroke(new BasicStroke(1.5f));
         for(int i =0; i < fletor.size() -1; i++){
             g.drawLine(fletor.get(i).x + xInicio, Math.abs( (fletor.get(i).y)), fletor.get(i+1).x + xInicio, Math.abs( (fletor.get(i+1).y)));
         }
         g.setColor(Color.BLACK);
         g.setStroke(new BasicStroke(1.0f));

     }

     public void graficoCortante(Graphics2D g){
         g.setColor(Color.blue);
         g.setStroke(new BasicStroke(1.5f));

         for(int i =0; i < cortante.size() -1; i++){
             g.drawLine(cortante.get(i).x + xInicio, Math.abs( (cortante.get(i).y)), cortante.get(i+1).x + xInicio, Math.abs( (cortante.get(i+1).y)));
         }
         g.setColor(Color.BLACK);
         g.setStroke(new BasicStroke(1.0f));

     }

     public void graficoDeformada(Graphics2D g){
         g.setColor(Color.blue);
         g.setStroke(new BasicStroke(1.5f));
         for(int i =0; i < deformada.size() -1; i++){
             g.drawLine(deformada.get(i).x + xInicio, Math.abs( (deformada.get(i).y)), deformada.get(i+1).x + xInicio, Math.abs( (deformada.get(i+1).y)));
         }
         g.setColor(Color.BLACK);
         g.setStroke(new BasicStroke(1.0f));

     }


     public void reacaoBiapoiadaA(Graphics2D g){
         g.setColor(Color.black);
         g.setStroke(new BasicStroke(1.5f));


         Polygon trianguloF = new Polygon();
         // Adiciona o primeiro ponto, o de cima.
         trianguloF.addPoint(xInicio - 5, yInicio+55);
         // Adiciona o segundo ponto, o do canto inferior esquerdo
         trianguloF.addPoint(xInicio + 5, yInicio+55);
         // Adiciona o segundo ponto, o do canto inferior direito
         trianguloF.addPoint((2 * xInicio+ 0) / 2, yInicio+45);

         //System.out.println("Forca: " + (2 * x) / 2);
         g.fillPolygon(trianguloF);

         g.drawLine((2 * xInicio+ 0) / 2, yInicio + 55, (2 * xInicio+ 0) / 2, yInicio + 60);
         g.drawLine(xInicio - 35, yInicio + 60, xInicio, yInicio + 60);

         DecimalFormat df = new DecimalFormat("0.00");

         String a;
         a = String.valueOf(df.format(biapoiadaA));

         int largura = (a.length() +1)*7;

         g.setColor(Color.red);
         g.setFont(new Font(null, Font.BOLD, 12));
//         g.drawString("R: ", xInicio - 35-largura-8, yInicio + 62);
//         g.drawString(a, xInicio - 35-((3+1)*7)-8, yInicio + 62);
         g.drawString("R: ", xInicio - (30 + largura + (7*2)), yInicio + 62);
         g.drawString(a, xInicio - (30+ largura), yInicio + 62);

     }

     public void reacaoBiapoiadaB(Graphics2D g){
         g.setColor(Color.black);
         g.setStroke(new BasicStroke(1.5f));


         g.setColor(Color.black);
         Polygon trianguloF2 = new Polygon();
         // Adiciona o primeiro ponto, o de cima.
         trianguloF2.addPoint(xFim - 5, yInicio+55);
         // Adiciona o segundo ponto, o do canto inferior esquerdo
         trianguloF2.addPoint(xFim + 5, yInicio+55);
         // Adiciona o segundo ponto, o do canto inferior direito
         trianguloF2.addPoint((2 * xFim+ 0) / 2, yInicio+45);

         //System.out.println("Forca: " + (2 * x) / 2);
         g.fillPolygon(trianguloF2);

         g.drawLine((2 * xFim+ 0) / 2, yInicio + 55, (2 * xFim+ 0) / 2, yInicio + 60);
         g.drawLine(xFim + 35, yInicio + 60, xFim, yInicio + 60);

         DecimalFormat df = new DecimalFormat("0.00");
         String a;
         a = String.valueOf(df.format(biapoiadaB));
         g.setColor(Color.red);
         g.setFont(new Font(null, Font.BOLD, 12));
         g.drawString("R: ", xFim + 35 + 5, yInicio + 62);
         g.drawString(a, xFim + 35+((3)*7) -2, yInicio + 62);

         g.setColor(Color.black);

         //g.drawLine(xFim + 40, yInicio + 50, xFim, yInicio + 50);

     }



     public void reacaoEngastada(Graphics2D g){
         g.setColor(Color.black);
         g.setStroke(new BasicStroke(1.5f));


         Polygon trianguloF = new Polygon();
         // Adiciona o primeiro ponto, o de cima.
         trianguloF.addPoint(xInicio - 5, yInicio+55);
         // Adiciona o segundo ponto, o do canto inferior esquerdo
         trianguloF.addPoint(xInicio + 5, yInicio+55);
         // Adiciona o segundo ponto, o do canto inferior direito
         trianguloF.addPoint((2 * xInicio+ 0) / 2, yInicio+45);

         //System.out.println("Forca: " + (2 * x) / 2);
         g.fillPolygon(trianguloF);

         g.drawLine((2 * xInicio+ 0) / 2, yInicio + 55, (2 * xInicio+ 0) / 2, yInicio + 60);
         g.drawLine(xInicio - 35, yInicio + 60, xInicio, yInicio + 60);

         DecimalFormat df = new DecimalFormat("0.00");

         String a;
         a = String.valueOf(df.format(valorReacaoE));

         int largura = (a.length() +1)*7;

         g.setColor(Color.red);
         g.setFont(new Font(null, Font.BOLD, 12));
//         g.drawString("R: ", xInicio - 35-largura-8, yInicio + 62);
//         g.drawString(a, xInicio - 35-((3+1)*7)-8, yInicio + 62);
         g.drawString("R: ", xInicio - (30 + largura + (7*2)), yInicio + 62);
         g.drawString(a, xInicio - (30+ largura), yInicio + 62);


//         g.setColor(Color.black);
//         Polygon trianguloF2 = new Polygon();
//         // Adiciona o primeiro ponto, o de cima.
//         trianguloF2.addPoint(xFim - 5, yInicio+55);
//         // Adiciona o segundo ponto, o do canto inferior esquerdo
//         trianguloF2.addPoint(xFim + 5, yInicio+55);
//         // Adiciona o segundo ponto, o do canto inferior direito
//         trianguloF2.addPoint((2 * xFim+ 0) / 2, yInicio+45);
//
//         //System.out.println("Forca: " + (2 * x) / 2);
//         g.fillPolygon(trianguloF2);
//
//         g.drawLine((2 * xFim+ 0) / 2, yInicio + 55, (2 * xFim+ 0) / 2, yInicio + 60);
//         g.drawLine(xFim + 35, yInicio + 60, xFim, yInicio + 60);
//
//         a = String.valueOf(df.format(biapoiadaB));
//         g.setColor(Color.red);
//         g.setFont(new Font(null, Font.BOLD, 12));
//         g.drawString("R: ", xFim + 35 + 5, yInicio + 62);
//         g.drawString(a, xFim + 35+((3)*7) -2, yInicio + 62);
//
//         g.setColor(Color.black);

         //g.drawLine(xFim + 40, yInicio + 50, xFim, yInicio + 50);

     }
   


    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
    }// </editor-fold>//GEN-END:initComponents

    // Variables declaration - do not modify//GEN-BEGIN:variables
    // End of variables declaration//GEN-END:variables

    //variaveis do tipo de apoio
    private boolean fixoD  = false;
    private boolean desliF = false;
    private boolean pontoE = false;
    private boolean engP   = false;

    //x e y do inicio da viga
    private int xInicio = 0;
    private int yInicio    = 0;
    private boolean inicioViga = false;

    //x e y do fim da viga
    private int xFim = 0;
    private int yFim    = 0;
    private boolean fimViga = false;

    private int raio = 5;

    //tamanho da viga em pixels
    private int tamanho = 0;

    private Utilidades conversoes = new Utilidades();

    //
    private boolean desenhouViga = false;

    //x carga concentrada
    private int xConcentrada = 0;
    private boolean concentrada = false;
    private int tamanhoConcentrada = 0;
    private boolean desenhouC = false;

    //carga distribuida
    private int xInicioDist = 0;
    private int xFimDist = 0;
    private boolean distribuida = false;
    private boolean desenhouD = false;

    //x carga momento
    private int xCMomento = 0;
    private boolean cMomento = false;
    private int tamanhoCMomento = 0;
    private boolean desenhouCM = false;
    private JLabel labelM;
    private Icon icone;


    private int tamanhoDistribuida;

    private boolean momentoFletor = false;
    private int xMomento;
    private int yMomento;
    private double valorMomento;

    private boolean esforcoCortante = false;
    private int xCortante;
    private int yCortante;
    private double valorCortante;

    private ArrayList<Point> fletor = new ArrayList<Point>();
    private boolean graficoFletor = false;

    private ArrayList<Point> cortante = new ArrayList<Point>();
    private boolean graficoCortante = false;

    private boolean reacaoBiapoiadaA = false;
    private boolean reacaoBiapoiadaB = false;
    private double biapoiadaA;
    private double biapoiadaB;

    private boolean reacaoEngastada = false;
    private double valorReacaoE;

    private ArrayList<Point> deformada = new ArrayList<Point>();
    private boolean graficoDeformada = false;

    private boolean deformadaValor = false;
    private int xDeformada;
    private int yDeformada;
    private double valorDeformada;

    public void setDeformadaValor(boolean deformadaValor) {
        this.deformadaValor = deformadaValor;
    }

    public void setxDeformada(int xDeformada) {
        this.xDeformada = xDeformada;
    }

    public void setyDeformada(int yDeformada) {
        this.yDeformada = yDeformada;
    }

    public void setValorDeformada(double valorDeformada) {
        this.valorDeformada = valorDeformada;
    }

    

    public void setDeformada(ArrayList<Point> deformada) {
        this.deformada = deformada;
    }

    public void setGraficoDeformada(boolean graficoDeformada) {
        this.graficoDeformada = graficoDeformada;
    }


    public void setEsforcoCortante(boolean esforcoCortante) {
        this.esforcoCortante = esforcoCortante;
    }

    public void setxCortante(int xCortante) {
        this.xCortante = xCortante;
    }

    public void setyCortante(int yCortante) {
        this.yCortante = yCortante;
    }

    public void setValorCortante(double valorCortante) {
        this.valorCortante = valorCortante;
    }



    public void setReacaoEngastada(boolean reacaoEngastada) {
        this.reacaoEngastada = reacaoEngastada;
    }

    public void setValorReacaoE(double valorReacaoE) {
        this.valorReacaoE = valorReacaoE;
    }

    public void setBiapoiadaA(double biapoiadaA) {
        this.biapoiadaA = biapoiadaA;
    }

    public void setBiapoiadaB(double biapoiadaB) {
        this.biapoiadaB = biapoiadaB;
    }

    public void setReacaoBiapoiadaA(boolean reacaoBiapoiadaA) {
        this.reacaoBiapoiadaA = reacaoBiapoiadaA;
    }

    public void setReacaoBiapoiadaB(boolean reacaoBiapoiadaB) {
        this.reacaoBiapoiadaB = reacaoBiapoiadaB;
    }


    public void setGraficoFletor(boolean graficoFletor) {
        this.graficoFletor = graficoFletor;
    }

    public void setGraficoCortante(boolean graficoCortante) {
        this.graficoCortante = graficoCortante;
    }


    public void setFletor(ArrayList<Point> fletor) {
        this.fletor = fletor;
    }

    public void setCortante(ArrayList<Point> cortante) {
        this.cortante = cortante;
    }




    public void setFixoD(boolean fixoD) {
        this.fixoD = fixoD;

        desliF = false;
        pontoE = false;
        engP   = false;
    }

    public void setDesliF(boolean desliF) {
        this.desliF = desliF;

        fixoD = false;
        pontoE = false;
        engP   = false;
    }

    public void setPontoE(boolean pontoE) {
        this.pontoE = pontoE;

        fixoD = false;
        desliF = false;
        engP   = false;
    }

    public void setEngP(boolean engP) {
        this.engP = engP;

        fixoD = false;
        desliF = false;
        pontoE = false;
    }

    public void setxInicio(int xInicio) {
        this.xInicio = xInicio;
    }

    public void setyInicio(int yInicio) {
        this.yInicio = yInicio;
    }


    public void setInicioViga(boolean inicioViga) {
        this.inicioViga = inicioViga;
    }

    public void setxFim(int xFim) {
        this.xFim = xFim;
    }

    public void setyFim(int yFim) {
        this.yFim = yFim;
    }

    public void setFimViga(boolean fimViga) {
        this.fimViga = fimViga;
    }

    public void setDesenhouViga(boolean desenhouViga) {
        this.desenhouViga = desenhouViga;
    }

    public void setxConcentrada(int xConcentrada) {
        this.xConcentrada = xConcentrada;
    }

    public void setConcentrada(boolean concentrada) {
        this.concentrada = concentrada;
    }

    public void setxInicioDist(int xInicioDist) {
        this.xInicioDist = xInicioDist;
    }

    public void setxFimDist(int xFimDist) {
        this.xFimDist = xFimDist;
    }

    public void setDistribuida(boolean distribuida) {
        this.distribuida = distribuida;
    }

    public void setDesenhouC(boolean desenhouC) {
        this.desenhouC = desenhouC;
    }

    public void setDesenhouD(boolean desenhouD) {
        this.desenhouD = desenhouD;
    }

    public void setMomentoFletor(boolean momentoFletor) {
        this.momentoFletor = momentoFletor;
    }

    public void setxMomento(int xMomento) {
        this.xMomento = xMomento;
    }

    public void setyMomento(int yMomento) {
        this.yMomento = yMomento;
    }

    public void setValorMomento(double valorMomento) {
        this.valorMomento = valorMomento;
    }

    public void setxCMomento(int xCMomento) {
        this.xCMomento = xCMomento;
    }

    public void setcMomento(boolean cMomento) {
        this.cMomento = cMomento;
    }

    public void setTamanhoCMomento(int tamanhoCMomento) {
        this.tamanhoCMomento = tamanhoCMomento;
    }

    public void setDesenhouCM(boolean desenhouCM) {
        this.desenhouCM = desenhouCM;
    }




   public boolean  getReacaoBiapoiadaA() {
        return reacaoBiapoiadaA;
    }

    public boolean  getReacaoBiapoiadaB() {
        return reacaoBiapoiadaB;
    }

    public boolean  getReacaoEngastada() {
        return reacaoEngastada;
    }

    public int getxInicio() {
        return xInicio;
    }

    public int getyInicio() {
        return yInicio;
    }

    public int getxFim() {
        return xFim;
    }

    public int getyFim() {
        return yFim;
    }

    public int getxConcentrada() {
        return xConcentrada;
    }

    public int getTamanhoConcentrada() {
        return tamanhoConcentrada;
    }

    public int getxInicioDist() {
        return xInicioDist;
    }

    public int getxFimDist() {
        return xFimDist;
    }

    public boolean getFixoD(){
        return fixoD;
    }

    public boolean getDesliF(){
        return desliF;
    }

    public boolean getPontoE(){
        return pontoE;
    }

    public boolean getEngP(){
        return engP;
    }

    public int getTamanhoDistribuida() {
        return tamanhoDistribuida;
    }

    public int getxCMomento() {
        return xCMomento;
    }

    public int getTamanhoCMomento() {
        return tamanhoCMomento;
    }








}
